Skip to content

[toc]

总结: Express 是「最小化、无约束」的 HTTP 工具库;Nest 是「自带架构规范、依赖注入、全家桶」的企业级框架。 二者可共存,也能渐进迁移。

1. 定位差异

维度Express.jsNestJS
官方定位Fast, unopinionated, minimalistA progressive Node.js framework
抽象层级微框架(micro-framework)全栈企业级(opinionated)
设计理念无约束、自由拼装强约束、分层、IoC、装饰器、Angular-style
核心依赖自身 + 中间件生态内置 DI 容器 + 可选 Express/Fastify 适配器

2. 代码风格对比

2.1 Express:回调链 + 无 DI(依赖注入)

js
// app.js
const express = require('express');
const app = express();

app.get('/cats', (req, res) => {
  res.json({ data: ['tom', 'garfield'] });
});

app.listen(3000);

2.2 Nest:装饰器 + TypeScript + DI

ts
// cats.controller.ts
@Controller('cats')
export class CatsController {
  constructor(private catsService: CatsService) {}
  @Get()
  findAll() {
    return { data: this.catsService.findAll() };
  }
}

// cats.service.ts
@Injectable()
export class CatsService {
  findAll() { return ['tom', 'garfield']; }
}

3. 架构支持

能力ExpressNest
路由手动 app.get()装饰器 @Get() @Post()
分层自己搭强制 Module/Controller/Service
依赖注入内置 IoC 容器,可 Mock、可替换 Scope
单元测试额外引入 supertest + sinon官方 Test.createTestingModule,零启动服务器测
微服务社区插件官方 @nestjs/microservices(TCP/gRPC/Kafka…)
GraphQL社区中间件官方 @nestjs/graphql(Code First/Schema First)
Swagger/OpenAPI手写或第三方官方 @nestjs/swagger 一键生成
Serverless自己封装官方 @nestjs/platform-serverless